package com.tianhao.export;


import java.util.List;
import java.util.Map;

/**
 * 因能建还未上线，但是现在有功能需要使用，故将报表功能，抽取出来
 *
 * @author： 76875
 * @date： 2022/4/22 星期五 9:28
 * @description：
 * @modifiedBy：
 * @version: 1.0
 */
public interface SimpleReport<T, R> {

    /**
     * 查询条件格式化
     *
     * @param condition 查询条件
     * @param extraMap  额外参数
     */
    void conditionInit(T condition, Map<String, Object> extraMap);

    /**
     * 报表数据提供类
     *
     * @param condition 查询条件
     * @param extraMap  额外参数
     * @return 提供报表基础数据
     */
    List<R> originDataListSupport(T condition, Map<String, Object> extraMap);

    /**
     * 基础报表内容转化完整
     *
     * @param condition      查询条件
     * @param originDataList 简单的报表内容
     * @param extraMap       额外参数
     * @return 补充完善的数据
     */
    List<R> completeDataList(T condition, List<R> originDataList, Map<String, Object> extraMap);


    /**
     * 查询报表
     *
     * @param condition 查询条件
     * @param extraMap  额外参数
     * @return 报表内容
     */
    default List<R> queryReport(T condition, Map<String, Object> extraMap) {
        try {
            // 初始化查询条件
            conditionInit(condition, extraMap);

            // 提供简单且直接的字段数据
            List<R> originData = originDataListSupport(condition, extraMap);

            // 完善报表内容
            return completeDataList(condition, originData, extraMap);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("查询报表错误！");
        }
    }
}
